package org.example.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.example.ourEnum.ArtifactEnumStatus;
import org.example.pojo.domain.Artifact;
import org.example.pojo.domain.ArtifactShow;

import java.util.List;

public interface ArtifactMapper {
    // 查询所有文物
    List<Artifact> findAll();
    // 通过ID查询文物
    Artifact findById(Integer artifactId);
    // 新增文物
    void insertArtifact(Artifact artifact);
    // 更新文物
    void updateArtifact(Artifact artifact);
    // 删除文物
    void deleteArtifact(Integer artifactId);
//    // 分页查询
//    List<Artifact> listByLimit(@Param("offset") int offset, @Param("limit") int limit);
    // 由展览发起一次文物借出
    void addShow(ArtifactShow artifactShow);
    // 借出时需要检查借出时间是否冲突
    Integer checkShowTimeConflict(ArtifactShow artifactShow);

    // 查询已通过的所有文物
    List<Artifact> findAvailableAll();
    // 通过id批准借出请求
    void approveById(@Param("id")Integer id);
    // 列出所有的借出请求
    List<ArtifactShow> listBorrow();
    // 知道展览会的id列出相关文物的信息
    List<Artifact> listShowArtifactByExhibitionId(@Param("exhibitionId")Integer id);
    // 通过展览审查id获取ArtifactId
    Integer getArtifactIdByShowId(@Param("id") Integer id);
    // 通过ArtifactId更改文物状态
    void changeArtifactStatusByArtifactId(@Param("artifactId")Integer artifactId,@Param("enum") ArtifactEnumStatus status);
    // 模糊查询
    List<Artifact> like(@Param("query")String query);
    // 列举出所有过期的ArtifactId

    @Select("SELECT * FROM artifact WHERE status = 'pending'")
    List<Artifact> listPendingArtifacts();

    List<Integer> checkExpire();
    // 通过artifactId删除过期的展出记录
    void removeShowById(Integer artifactId);
    // 列出对应状态的文物列表
    List<Artifact> listStatusIs(@Param("status") ArtifactEnumStatus status);
}
